Механизм транзакций
Механизм транзакций является частью СУБД ЛИНТЕР. Он позволяет обеспечить целостность БД, как в случае нештатных ситуаций, так и в случае многопользовательской работы. Для обеспечения надежной работы клиентских приложений необходимо понимание работы этого механизма и принципов его использования.
Под транзакцией понимается группа операций, выполняющихся как неделимое целое. В некоторых источниках транзакцией называют не группу операций, а эффект, который они производят. Транзакции являются составной частью любой информационной системы, к которой предъявляются требования надежности и являются ее основными строительными блоками. Эти требования обеспечиваются следующими свойствами транзакций:
-
атомарность (неделимость). Гарантируется выполнение всей группы операций в случае удачного завершения транзакции и откат к состоянию до выполнения транзакции в случае сбоя или явного отката транзакции;
-
целостность (непротиворечивость). Транзакция переводит БД из одного непротиворечивого состояние в другое. При этом подразумевается, что клиентское приложение является правильно написанным;
-
изолированность. Для клиентского приложения создается иллюзия, что все остальные транзакции выполняются либо до, либо после его транзакции, что обеспечивает прозрачную работу в многопользовательском режиме;
-
устойчивость. При удачном завершении транзакции гарантируется сохранение результатов ее работы даже в случае последующего сбоя в работе СУБД.
Для управления транзакциями в СУБД ЛИНТЕР служат специальные
команды CALL-интерфейса и SQL-запросы. Любая транзакция должна заканчиваться выполнением
оператора COMMIT
или ROLLBACK
, которые соответственно
производят окончательные действия по выполнению транзакции, с сообщением в случае
логической ошибки, или производят откат всех действий, которые транзакция произвела.
В случае сбоя в работе СУБД (например, отключение питания) после перезапуска СУБД для всех
не завершившихся транзакций команда ROLLBACK
подается автоматически.
Во время выполнения транзакции производимые ею в БД изменения, как правило, не должны
быть доступны другим транзакциям (клиентским приложениям), т.к.
это может привести к проблеме использования данных, которые не являются
окончательными («грязные» данные).